package com.ruoyi.gd.dbjlb.utils;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.metadata.Cell;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.gd.cgbjd.domain.ZCgbjd;
import com.ruoyi.gd.cgbjd.mapper.ZCgbjdMapper;
import com.ruoyi.gd.dbjlb.domain.bo.ZDbjlbBo;
import com.ruoyi.gd.dbjlb.domain.vo.ImportZDbjlbVo;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class DbjlbRowsListener extends AnalysisEventListener<ImportZDbjlbVo>{

    private List<ImportZDbjlbVo> zkhbjkList = new ArrayList<>();

    private int skipRows; // 要跳过的行数
    private ZDbjlbBo zkhbjkBo; // 要跳过的行数
    private boolean isSkipped = false;

    private ZCgbjdMapper zCgbjdMapper;

    public DbjlbRowsListener(int skipRows, ZDbjlbBo zkhbjkBo, ZCgbjdMapper zCgbjdMapper) {
        this.skipRows = skipRows;
        this.zkhbjkBo = zkhbjkBo;
        this.zCgbjdMapper = zCgbjdMapper;
    }

    @Override
    public void onException(Exception exception, AnalysisContext context) throws Exception {
        super.onException(exception, context);
    }

    @Override
    public void invoke(ImportZDbjlbVo data, AnalysisContext context) {
        try {
            // 当前行
            int currentRowNum = context.readRowHolder().getRowIndex();
            if (currentRowNum >= skipRows && StringUtils.isNotEmpty(data.getXh()) && StringUtils.isNotEmpty(data.getYqmc()) && StringUtils.isNotEmpty(data.getXhgg())) {
                // 查询这一行数据的单价
                handleData(zkhbjkBo, data);

                Map<Integer, Cell> cellMap = context.readRowHolder().getCellMap();
                cellMap.forEach((k, v) -> {
                    // 单价是 5
                    if (v.getColumnIndex()==5) {

                    }
                    // 总价是 7
                    if (v.getColumnIndex()==7) {

                    }
                });
                // 去除当前实体类中的所有数据的空格
                StringUtils.trimEntityFields(data);
                zkhbjkList.add(data);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        System.out.println(context);
        System.out.println("数据遍历完毕");
        // 所有数据解析完成后的操作
    }


    public List<ImportZDbjlbVo> getZDbjlbList() {
        return zkhbjkList;
    }

    private void handleData(ZDbjlbBo bo, ImportZDbjlbVo importZDbjlbVo) {
        // 1. 先判断当前的报价类型。 1 常规报价  2 完工单报价  3 常规+完工单报价
        /**
         * 1. 常规报价： 通过仪器名字查询查询
         * 2. 完工单报价： 通过导入类型数据进行查询
         * 3. 常规+完工单报价： 先通过导入类型进行查询数据，如果没有的话，则通过仪器名称查询数据
         */
        if (bo.getBjlx().equals("1")) {
            // 常规报价： 通过仪器名字查询查询
            // 构建查询条件
            LambdaQueryWrapper<ZCgbjd> lqw = Wrappers.lambdaQuery();
            lqw.eq(ZCgbjd::getName, importZDbjlbVo.getYqmc());
            List<ZCgbjd> zCgbjds = zCgbjdMapper.selectList(lqw);
            if (zCgbjds.size() > 0) {
                ZCgbjd zCgbjd = zCgbjds.get(0);
                setData(zCgbjd, importZDbjlbVo);
            }
            importZDbjlbVo.setBjfs("常规报价");

//            if (zkhbjkList.size() > 0) {
//                // 计算合计金额
//                double sum = zkhbjkList.stream()
//                    .mapToDouble(item -> Double.parseDouble(item.getDj()))
//                    .sum();
//                // 金额加上下场费
//                Double xcfy = bo.getXcfy();
//                if (xcfy!=null) {
//                    // 设置总金额
//                    bo.setHjje(sum + xcfy);
//                }else {
//                    bo.setHjje(sum);
//                }
//
//                ImportZDbjlbVo one = new ImportZDbjlbVo();
//                one.setXh((zkhbjkList.size() + 1) + "");
//                one.setYqmc("下场费用");
//                if (xcfy != null) {
//                    one.setXj(xcfy.toString());
//                }else {
//                    one.setXj("0");
//                }
//                zkhbjkList.add(one);
//
//                ImportZDbjlbVo two = new ImportZDbjlbVo();
//                two.setXh((zkhbjkList.size() + 1) + "");
//                two.setYqmc("合计金额");
//                two.setXj(bo.getHjje().toString());
//                zkhbjkList.add(two);
//            }
        }else if(bo.getBjlx().equals("2")) {

        }else {

        }
    }

    /**
     * 设置单价，计算当前这条数据的总价
     * @param zCgbjd
     * @param importZDbjlbVo
     */
    public void setData(ZCgbjd zCgbjd, ImportZDbjlbVo importZDbjlbVo) {
        importZDbjlbVo.setDj(zCgbjd.getDj().toString());  // 设置单价
        if (StringUtils.isNotEmpty(importZDbjlbVo.getDj()) && StringUtils.isNotEmpty(importZDbjlbVo.getNumber())) {
            Double dj = Double.parseDouble(importZDbjlbVo.getDj());
            Integer number = Integer.parseInt(importZDbjlbVo.getNumber());
            Double zj = dj * number;
            importZDbjlbVo.setXj(zj.toString());  // 设置总价
        }
    }

}
